package com.sdkx.app.view;

import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Environment;
import android.util.AttributeSet;
import android.util.Log;

import com.sdkx.app.R;
import com.sdkx.app.datalayers.LayersFactory;
import com.sdkx.app.datalayers.MapDraw;

import java.util.ArrayList;

import cn.creable.gridgis.controls.MapControl;
import cn.creable.gridgis.controls.MapView;
import cn.creable.gridgis.display.IDisplayListener;
import cn.creable.gridgis.display.IDisplayTransformation;
import cn.creable.gridgis.geometry.IEnvelope;
import cn.creable.gridgis.geometry.Point;

public class MyMapView extends MapView implements Runnable {
    static {
        System.loadLibrary("UCMAP");
    }

    public MyMapView(Context arg0, AttributeSet arg1) {
        super(arg0, arg1);
    }

    /**
     * 当地图对象调用了onSizeChanged之后, MapControl初始化完毕, loadMap 函数执行完毕之后 UCMap 引擎会自
     * 动创建地图对象（Map）、绘图对象（Display）以及各种图层、符号、渲染器等等对象相当于程序中的new 类。
     */
    @Override
    protected void onSizeChanged(int arg0, int arg1, int arg2, int arg3) {
        super.onSizeChanged(arg0, arg1, arg2, arg3);
        final MapControl mapControl = getMapControl();
        // 比例尺
        /**
         * height - 比例尺符号中小竖条的高度 length - 比例尺符号中横向长度 x - 比例尺符号左下角的横坐标 y - 比例尺符号左下角的纵坐标 color -
         * 比例尺符号的颜色，ARGB格式，例如0xFF00FF00表示完全不透明的绿色 textColor - 比例尺符号的文字颜色，ARGB格式 strokeWith - 比例尺符号横线的宽度 textSize -
         * 比例尺符号的文字大小
         */
        if (mapControl != null) {
            // getResources().getDisplayMetrics().xdpi 获取了屏幕的横向dpi，乘以2.54可以得到1厘米有多少个像素点
            mapControl.showScaleBar(8, getResources().getDisplayMetrics().xdpi / 2.54f, 10,
                    mapControl.getHeight() - 10, Color.BLACK, Color.RED, 3, 20);
            // 指南针
            mapControl.showCompass(0, 0, ((BitmapDrawable) getResources().getDrawable(R.drawable.compass)).getBitmap());
            if (mapControl.getMap() == null) {
                String path = Environment.getExternalStorageDirectory().getPath();
                mapControl.loadMap(path + "/china/chinaj/map.ini", (byte) 0);
                mapControl.setPanTool(false, 0);// 将漫游工具设置为当前地图工具
                LayersFactory.getInstance().setContext(getContext().getApplicationContext());
                LayersFactory.getInstance().setMapControl(mapControl);
                LayersFactory.getInstance().initLayers();
                mapControl.setDisplayListener(new IDisplayListener() {
                    @Override
                    public void onDisplayNotify(IDisplayTransformation iDisplayTransformation, long l) {
                        Log.d("MapView", "mapchange displaynotify time = " + l);
                        if (LayersFactory.getInstance().isScreenChanaged(mapControl.getExtent())) {
                            LayersFactory.getInstance().update();
                            LayersFactory.getInstance().setEnv(mapControl.getExtent());
                        }

                    }
                });

            }
        }
    }

    /**
     * 将地图的中心移动到指定点
     *
     * @param longitude    目标点经度
     * @param latitude     目标点纬度
     * @param useAnimation 移动过程是否开启动画效果
     */
    public void centerTo(double longitude, double latitude, boolean useAnimation) {
        if (useAnimation) {
            getMapControl().slideAnimation(longitude, latitude);
        } else {
            IEnvelope env = getMapControl().getExtent();//获取当前地图窗口的可 视范围
            env.centerAt(new Point(longitude, latitude));//将获得的可视范围的中心移动到指定位置处
            getMapControl().refresh();//刷新地图
        }
    }

    @Override
    public void run() {

        ArrayList<MapDraw> list = LayersFactory.getInstance().getMapDraws();
        for (MapDraw draw : list) {
            draw.upData();
        }
    }

    //    /**
//     * 将地图坐标转换为屏幕坐标
//     */
//    public Point transformXYToLongLat(double longitude,double latitude){
//        Point result = new Point();
//        Point pt = new Point(longitude,latitude);
//        getMapControl().getDisplay().getDisplayTransformation().fromMapPoint(pt,result);
//        return result;
//    }
//
//    /**
//     * 将屏幕坐标转换为地图坐标
//     */
//    public Point transformLongLatToXY(double x,double y){
//        Point result = new Point();
//        Point pt = new Point(x,y);
//        getMapControl().getDisplay().getDisplayTransformation().toMapPoint(pt,result);
//        return result;
//    }
//
//    /*
//    * 设置地图显示比例
//     */
    public void setZoom(float value) {
        getMapControl().getDisplay().getDisplayTransformation().setZoom(value);
        getMapControl().refresh();
    }
//
//    /**
//     * 将当前地图工具改为测距工具
//     */
//    public void setMeasureTool(){
//        MeasureTool measureTool = new MeasureTool(getMapControl(),0);//第二个参数为 0 表示测距离，1 则表示测面积
//        measureTool.selector.setOffset(0,60);
//        getMapControl().setCurrentTool(measureTool);
//    }
//
//    /**
//     * 将当前地图工具改为移动地图工具
//     */
//    public void setPanTool(){
//        getMapControl().setPanTool();
//    }
//
//    /**
//     * 将当前地图工具改为手绘工具
////     * 可以在地图上随意的绘制你需要的图形，不会保存进文件，下次打开地
////     * 图时看不到上次的手绘线。可以调用命令清除最后添加的一条手绘线，也可以清空所有的手 绘线。
////     */
//    public void setFingerPaintTool(){
//        FingerPaintTool fingerPaintTool = FingerPaintTool.getInstance(getMapControl());
//        getMapControl().setCurrentTool(fingerPaintTool);
//    }
//
//    /**
//     * 清除最后添加的一条手绘线
//     */
//    public void removeLastPaint(){
//        FingerPaintTool fingerPaintTool = FingerPaintTool.getInstance(getMapControl());
//        fingerPaintTool.removeLast();
//    }
//
//    /**
//    * 清空所有的手绘线。
//     */
//    public void clearPaint(){
//        FingerPaintTool fingerPaintTool = FingerPaintTool.getInstance(getMapControl());
//        fingerPaintTool.clear();
//    }
//
//    /*********************************地图符号化 START****************************/
//    /**
//     * MarkerSymbol本身就是一种点符号，这种符号仅仅是一个可以设定尺寸、颜色的圆点。
//     * @param size
//     * @param angle
//     * @param color
//     * @param xoffset
//     * @param yoffset
//     * @return
//     */
//    public MarkerSymbol createMarkerSymbol(float size,float angle,int color,float xoffset,float yoffset){
//        return new MarkerSymbol(8,0,0xffff00,0,0);
//    }
//
//
//    /*********************************地图符号化 END*****************************/
//
}
